package main

import (
	"fmt"
	"slices"
	"strings"
)

func main() {

	{
		ii := make([]int, 3, 5)
		//有意思，移除冗余空间
		ii2 := slices.Clip(ii)
		fmt.Printf("ii.len: %d, ii.cap: %d, ii: %v\n", len(ii), cap(ii), ii)
		fmt.Printf("ii2.len: %d, ii2.cap: %d, ii2: %v\n", len(ii2), cap(ii2), ii2)
		fmt.Println(strings.Repeat("*", 18))
	}

	{
		ii := []int{1, 1, 2, 3, 3, 2, 4, 5, 5, 6, 2, 7, 7}
		//Compact 压缩相邻且相等的数据。类似unix的uniq
		//注意，压缩后：
		//- 原切片：len可能变小，但容量不变，后续的内容为零值
		//- 新切片：全新
		ii2 := slices.Compact(ii)
		fmt.Println(ii)
		fmt.Println(ii2)
		fmt.Println(strings.Repeat("*", 18))
	}

	{
		numbers := []int{0, 42, 8}
		fmt.Println(slices.Equal(numbers, []int{0, 42, 8})) //true
		fmt.Println(slices.Equal(numbers, []int{10}))       //false
		fmt.Println(strings.Repeat("*", 18))
	}
	{ //拼接，卧槽 终于有这个方法了
		ii1 := []int{0, 42, 8}
		ii2 := []int{1, 3, 5}
		concat := slices.Concat(ii1, ii2)
		fmt.Println(ii1)
		fmt.Println(ii2)
		fmt.Println(concat)
		fmt.Println(strings.Repeat("*", 18))
	}
	{ //排序
		ii := []int{0, 42, 8, 9, 8, 6, 7, 1, 3, 5}
		fmt.Println(ii)
		slices.Sort(ii)
		fmt.Println(ii)
		fmt.Println(slices.IsSorted(ii))
		fmt.Println(strings.Repeat("*", 18))
	}
	{ //排序
		ii := []int{0, 42, 8, 9, 8, 6, 7, 1, 3, 5}
		fmt.Println(ii)
		slices.Reverse(ii)
		fmt.Println(ii)
		fmt.Println(slices.Min(ii)) //不需要排序
		fmt.Println(slices.Max(ii)) //不需要排序
		fmt.Println(slices.IsSorted(ii))
		fmt.Println(strings.Repeat("*", 18))
	}
	{ //插入
		names := []string{"Alice", "Bob", "Vera"}
		names = slices.Insert(names, 1, "Bill", "Billie")
		names = slices.Insert(names, len(names), "Zac")
		fmt.Println(names)
		fmt.Println(strings.Repeat("*", 18))
	}
	{
		//replace
		//concat
		//delete
		//slices.Contains()
		//slices.Grow()
		//slices.Insert()
		//slices.Index()
		//slices.Reverse()
		//slices.Max() //不需要排序
		//slices.Min() //不需要排序
		//slices.IsSorted()
		//slices.Sort() //排序
		//slices.BinarySearch()

	}
}
